home *** CD-ROM | disk | FTP | other *** search
-
-
- Paul Schubert
- Rottweiler Str. 8
- 60327 Frankfurt / M
- Tel.: 069 / 231145
-
- Fido 2:244/1181.18
-
-
- Beschreibung des Moduls FDIRBOX
- ───────────────────────────────
-
- Frankfurt, 18.12.94
-
-
- Diese DOC war nicht für FDIRBOX gedacht sondern für eine funktionsgleiche
- UNIT, die mit CRT arbeitet - ich hoffe, es gibt keine Diskrepanzen.
-
- Bei der UNIT DIRBOX handelt es sich um eine Fileselektorbox.
- DIRBOX dürfte auch in Grafik Videomodi einsetzbar sein, ich garantiere
- aber nicht dafür, daß dieser Versuch brauchbare Ergebnisse zeitigt. In
- jedem Fall muß das Hauptprogramm USES CRT enthalten und vor Aufruf von
- SELECTFILE ein DIRECTVIDEO := FALSE;
- Das Sichern und Restaurieren des Bildschirms funktioniert in den Grafik
- Videomodi auf keinen Fall.
-
-
- DIRBOX wird wie folgt benutzt :
-
- USES DIRBOX;
-
- VAR Filename : STRING;
-
- Filename := SELECTFILE(Pfad,Filespezifikation);
- z.B. : Filename := SELECTFILE('C:\TP','*.*');
- IF Filename = '' THEN { kein Filename selektiert ( <Esc> ) };
-
- SELECTFILE benutzt das im Hauptprogramm eingestellte WINDOW, der alte
- Bildschirminhalt wird von SELECTFILE gesichert und und nach getaner Arbeit
- wiederhergestellt.
- Es ist natürlich nicht möglich, daß in einem beliebig kleinen Fenster
- eine Auswahlliste dargestellt wird, deshalb vergrößert SELECTFILE das
- aktuelle WINDOW, wenn dies nötig ist auf das minimal nötige Maß.
-
-
- Die Bedienung der File Selektorbox ist einfach :
- Mit den Cursortasten oder der Maus wird ein Filename, Directory oder
- Laufwerksbezeichner ausgewählt; die Steuertasten <Bild auf>, <Bild ab>,
- <Pos 1> und <Ende> haben die übliche Funktion.
- Durch Eingabe von Buchstaben kann nach einem Dateinamen gesucht werden;
- die Leertaste, Backspace oder eine Cursortaste / Mausbewegung löschen den
- Suchbegriff. Der Suchbegriff wird unten im Rahmen angezeigt.
- <Ret> oder die linke Maustaste haben folgende Funktion :
- Ist ein Filename ausgewählt, wird dieser ans Hauptprogramm übergeben und
- die Fileselektorbox verlassen.
- Ist ein Unterverzeichnis ausgewählt, schaltet DIRBOX auf dies Verzeichnis
- um.
- Ist ein Laufwerksbezeichner ausgewählt, versucht DIRBOX, auf das Wurzel-
- verzeichnis des Laufwerks umzuschalten. Ist dies nicht möglich ( z.B. keine
- Diskette eingelegt ), ertönt ein Pieps und das aktuelle Verzeichnis bleibt
- erhalten.
- <Esc> oder die rechte Maustaste beenden die Selektorbox ohne einen
- Dateinamen auszuwählen; an das Hauptprogramm wird ein leerer String über-
- geben.
- Die in EXITKEYS definierten Tasten führen zum Verlassen der Auswahlbox.
- In diesem Fall enthält EXITKEY die Position des Tastencodes im Array
- EXITKEYS.
- Mit der Taste <Tab> kann die Anzeigeart umgeschaltet werden; folgende
- Anzeigearten sind möglich :
- 1 - Nur Dateiname ( Voreinstellung )
- 2 - Dateiname und Größe
- 3 - Dateiname, Größe, Datum / Uhrzeit
- 4 - Dateiname, Attribute, Größe, Datum / Uhrzeit
-
- Mit der Leertaste können mehrere Dateien markiert werden. Die Leertaste
- schaltet die Marke für die Datei um, auf der der Cursor steht.
- <Ctrl-T> markiert alle Dateien
- <Ctrl-U> löscht alle Marken
- Vor Beenden der Prozedur SELECTFILE oder beim Laufwerks / Verzeichnis-
- wechsel werden alle so markierten Filenamen einzeln der Prozedurvariablen
- PRINTNAME übergeben. Es wird der Filename einschließlich des kompletten
- Pfads auf PRINTNAME ausgegeben.
- Das Hauptprogramm kann PRINTNAME auf eine eigene Prozedur umleiten, z.B. um
- eine Dateiliste in ein File zu schreiben. Ohne Definition einer eigenen
- Prozedur PRINTNAME können die Marken nur als Lesezeichen benutzt werden.
- Die Ausgabe der markierten Namen erfolgt unabhängig davon, ob SELECTFILE
- mit <Ret> oder <Esc> beendet wird.
- In DIRBOX.PAS ist PRINTNAME wie folgt deklariert :
- VAR PRINTNAME : PROCEDURE(S:STRING);
- und auf eine leere Prozedur gelegt. Benutzt werden kann PRINTNAME wie folgt:
-
- VAR F : TEXT;
-
- {$F+}PROCEDURE LISTE_AUSGEBEN(NAME:STRING);{$F-}
- BEGIN
- WRITELN(F,NAME);
- { SCHREIBT EINEN AUSGEWÄHLTEN FILENAMEN EINSCHLIEßLICH DES VOLLSTÄNDIGEN
- PFADS IN DATEI 'LISTE.TXT' }
- END; { LISTE_AUSGEBEN }
-
- BEGIN
- PRINTNAME := LISTE_AUSGEBEN;
- ASSIGN(F,'LISTE.TXT');
- REWRITE(F);
- ...
- CLOSE(F);
- END.
-
-
- DIRBOX stellt im Wurzelverzeichnis jedes Laufwerks die Liste der logischen
- Laufwerke zur Auswahl, auf die momentan zugegriffen werden kann. D.h. auch
- Laufwerke, die mit ASSIGN und SUBST 'erzeugt' wurden, aber keine Laufwerke,
- für die nur ein Treiber vorhanden ist (z.B. nicht aktive Netzwerk Laufwerke),
- jedoch auch Disketten- und Wechselplattenlaufwerke, unabhängig davon, ob eine
- Diskette bzw. ein Medium eingelegt ist oder nicht.
-
- Wurde ein Dateiname ausgewählt, merkt sich DIRBOX ihn und positioniert
- beim nächsten Aufruf von SELECTFILE den Cursor auf diesen Namen oder, wenn
- er nicht gefunden wird, auf den nächstniedrigeren in der alphabetischen
- Sortierfolge.
- Soll dies unterbunden werden, kann vor Aufruf von SELECTFILE die Variable
- SUCHENACH auf '' gesetzt werden.
- Sie können auch vor dem ersten Aufruf von SELECTFILE der Variablen
- SUCHENACH einen Wert zuweisen, um den Cursor in der Auswahlliste vorab zu
- positionieren.
-
- In der Anzeige werden Laufwerke durch eine Raute und Unterverzeichnisse
- durch ein Rechteck gekennzeichnet. Diese Kennzeichner können vom Haupt-
- programm verändert werden; beachten Sie, daß diese Marken in die Sortier-
- reihenfolge mit eingehen !
- CONST DIRMARK : CHAR = #254; ist die Marke für Unterverzeichnisse
- DRIVEMARK : CHAR = #4; ist die Marke für Laufwerke
- DIRMARK und DRIVEMARK dürfen auf keinen Fall den selben Wert haben !
- Im Zweifelsfall können Sie
- DIRMARK := #255; und
- DRIVEMARK := ' ';
- einstellen; dann werden beide als Leerzeichen dargestellt, aber nach wie
- vor die Laufwerke vorne und die Unterverzeichnisse hinten einsortiert.
- Oder aber
- DIRMARK := ' '; und
- DRIVEMARK := #0;
- wieder werden beide als Leerzeichen dargestellt, die Sortierfolge ist aber
- zuerst die Laufwerke, dann Unterverzeichnisse und zuletzt Files.
-
- FDIRBOX benutzt die UNIT GETDRVS, um die vorhandenen logischen Laufwerke
- festzustellen.
-
- Wer DIRBOX in Programmen zusammen mit TPCRT benutzen will, muß den Compiler-
- schalter {$DEFINE USETPCRT} im Quellfile aktivieren.
- Soll DIRBOX keine Maus benutzen, muß der Compilerschalter {$DEFINE USEMOUSE}
- deaktiviert werden.
-
- Ein weiterer Compilerschalter {$DEFINE SPDISP} ermöglicht es, beim Compilieren
- festzulegen, in welcher Form die Anzeige erfolgt : Ist SPDISP definiert,
- werden die Filenamen in sortierter Folge untereinander angezeigt, d.h. in der
- linken Spalte von der ersten bis zur letzten Zeile und der nächste Name in
- der ersten Zeile der 2. Spalte, sonst in sortierter Folge nebeneinander, d.h.
- zuerst alle Spalten in der ersten Zeile, dann jeweils die nächste Zeile.
-
- DIRBOX enthält noch weitere Besonderheiten :
- Es können bis zu 5 Strings angegeben werden, um bestimmte Dateinamen von
- der Anzeige auszuschließen und bis zu 5 Strings, um nur nach bestimmten
- Dateinamen zu suchen :
- CONST EXCLUDE : ARRAY[1..ANZINCLUDE] OF STRING[12] = ('','','','','');
- INCLUDE : ARRAY[1..ANZINCLUDE] OF STRING[12] = ('','','','','');
- Sie können z.B.
- INCLUDE[1] := '.PAS';
- INCLUDE[2] := '.TPU';
- angeben, um nur Files mit der Erweiterung .PAS und .TPU angezeigt zu erhalten
- oder
- EXCLUDE[1] := '.BAK';
- um die Files mit Erweiterung .BAK von der Anzeige auszuschließen.
- In INCLUDE[] und EXCLUDE[] dürfen keine '*' und '?' angegeben werden, wie
- es sonst bei Filespezifikationen üblich ist. Der gleichzeitige Gebrauch von
- INCLUDE und EXCLUDE wird vermutlich keine sinnvollen Ergebnisse liefern.
-
- Ist der Filenamen Parameter bei Aufruf von SELECTFILE '*.*', werden die
- Inhalte von INCLUDE[] in der Kopfzeile der Auswahlbox angezeigt.
-
- Wenn Sie größere Listen für INCLUDE und / oder EXCLUDE brauchen, können
- Sie die Konstante CONST ANZINCLUDE = 5; im Quellcode verändern.
-
-
- Um es zu ermöglichen, die Auswahlliste mit anderen Tasten als <Ret> und
- <Esc> zu verlassen, können im Array EXITKEYS weitere Tasten definiert werden.
- Damit die Auswahlbox für verschiedene Funktionen benutzt werden kann, z.B.
- <Ret> = Anzeigen, <F1> = Editieren, <F2> = Löschen, <F3> = Umbenennen,
- liefert SELECTFILE auch beim Verlassen mittels eines EXITKEYS den ausge-
- wählten Dateinamen.
- Im Hauptprogramm kann anhand der Variablen EXITKEY festgestellt werden,
- mit welcher Taste SELECTFILE beendet wurde. EXITKEY gibt den Index im
- Array EXITKEYS an, beginnend mit 1, d.h.
- EXITKEY = 0 -> SELECTFILE wurde mit <Ret> oder <Esc> verlassen
- EXITKEY = 1 -> SELECTFILE wurde mit EXITKEYS[1] verlassen usw.
- In EXITKEYS werden 16 Bit Werte eingetragen, die als höherwertiges Byte
- den Scancode und als niederwertiges Byte den ASCII Wert einer Taste enthalten,
- z.B. für <F1> : EXITKEYS[1] := 59 SHL 8; bzw. EXITKEYS[1] := $3B00;
-
-
- Die Bildschirmattribute ( Farben ) sind in den folgenden 6 typisierten
- Konstanten abgelegt, die vom Hauptprogramm verändert werden können :
- CONST TANONSEL : BYTE = $0F; { TEXTATTRIBUT NICHT SELEKTIERT }
- TASELECT : BYTE = $70; { TEXTATTRIBUT SELEKTIERT }
- TARAND : BYTE = $1E; { TEXTATTRIBUT RAHMEN UM DIE AUSWAHLLISTE }
- TATITEL : BYTE = $5E; { TEXTATTRIBUT DES TITELS (PFAD / ANZAHL FILES) }
- TATAGED : BYTE = $0C; { markierte Namen }
- TATAGEDS : BYTE = $74; { markierte Namen, auf denen der Cursor steht }
-
-
- Die oben beschriebenen 4 Anzeigemodi können vor dem ersten bzw. vor jedem
- Aufruf von SELECTFILE explizit mittels der Variablen DIRDISPLAYMODE einge-
- stellt werden :
- DIRDISPLAYMODE := 1; Nur Dateiname -> Voreinstellung
- DIRDISPLAYMODE := 2; Dateiname und Größe
- DIRDISPLAYMODE := 3; Dateiname, Größe, Datum / Uhrzeit
- DIRDISPLAYMODE := 4; Dateiname, Attribute, Größe, Datum / Uhrzeit
-
- Als Voreinstellung können sowohl Unterverzeichnisse als auch andere logische
- Laufwerke angewählt werden.
- Ist dies nicht erwünscht, kann mit
- DRIVESALLOWED := FALSE; der Wechsel auf ein anderes Laufwerk und mit
- DIRSALLOWED := FALSE; der Verzeichniswechsel unterbunden werden.
-
-
- DIRBOX ist bei weitem noch nicht zu ende entwickelt; im laufe der Zeit
- werde ich gewiß noch einige Verbesserungen an dieser UNIT vornehmen.
-
-
-